<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1. 父构造函数 
        function Father(uname, age) {
            // this指向父构造函数实例对象
            this.uname = uname
            this.age = age
        }
        // 2.子构造函数
        function Son(uname, age, screen) {
            // this 指向子构造函数的实例对象
            // 子类继承父类的属性 只需一行代码 有call就有this 它俩不可分割
            Father.call(this, uname, age)//通过call修改了Father里this的指向 此时Father里的this被修改为Son里的this 即Father 里的this指向了Son的实例对象son
            // 也可专门在给子类添加独有属性
            this.screen = screen

        }
        var son = new Son('刘德华', 18, 100)
        console.log(son);
        console.log(son.uname);
    //    在es6之前子构造函数继承父构造函数的属性 可以通过借用父构造函数来实现
    //    核心原理:把父构造函数调用过来 但是里面有一个细节 在调用父构造函数时候 一定要把父构造函数当中的this修改为子构造函数中的this 所以我们有了call方法
    // 把father中的this指向子构造函数中的this 那现在子构造函数中的this就可以使用uname和age属性了 所以子构造函数相使用父构造函数里的属性 只需要这一句话就可以搞定


    </script>
</body>

</html>